<?php
namespace App\Services\WechatHandler;

use App\Jobs\WxTemplateSendResultHandle;
use \EasyWeChat\Kernel\Contracts\EventHandlerInterface;

/**
 * 事件消息处理器
 * @package App\WechatHandler
 */
class EventMessageHandler implements EventHandlerInterface
{
    /**
     * 消息处理
     * @param null $payload
     */
    public function handle($payload = null)
    {
        //消息异步保存到记录表
        \App\Jobs\WxmsgEventHandle::dispatch($payload)->onQueue('low');

        switch ($payload['Event']){
            case 'subscribe'://关注事件
                //异步更新用户数据
                \App\Jobs\WxUserRefresh::dispatch($payload['FromUserName'])->onQueue('high');
                //扫描带参数二维码关注
                if (isset($payload['EventKey']) && strpos($payload['EventKey'],'qrscene_') !== false){
                    \App\Jobs\WxQrcodeScanHandle::dispatch($payload);
                }
                break;
            case 'unsubscribe'://取消关注事件
                //异步更新用户数据
                \App\Jobs\WxUserRefresh::dispatch($payload['FromUserName']);

                break;
            case 'SCAN'://扫码事件推送
                //扫描带参数二维码
                if (isset($payload['EventKey']) && $payload['EventKey']){
                    \App\Jobs\WxQrcodeScanHandle::dispatch($payload);
                }
                break;
            case 'TEMPLATESENDJOBFINISH'://[模板消息]模版消息发送任务完成推送
                //推送二维码异步业务处理队列
                \App\Jobs\WxTemplateSendResultHandle::dispatch($payload);
                break;
            case 'LOCATION'://上报地理位置事件

                break;
            case 'click'://[菜单事件]点击菜单拉取消息时的事件推送

                break;
            case 'view'://[菜单事件]点击菜单跳转链接时的事件推送
                break;
            case 'scancode_push'://扫码推事件的事件推送
                break;
            case 'scancode_waitmsg'://扫码推事件且弹出“消息接收中”提示框的事件推送
                break;
            case 'pic_sysphoto'://弹出系统拍照发图的事件推送
                break;
            case 'pic_photo_or_album'://弹出拍照或者相册发图的事件推送
                break;
            case 'pic_weixin'://弹出微信相册发图器的事件推送
                break;
            case 'location_select'://弹出地理位置选择器的事件推送
                break;
            case 'MASSSENDJOBFINISH'://群发结果推送
                //微信群发结果处理
                \App\Jobs\WxMassResultHandle::dispatch($payload);
                break;
            case 'qualification_verify_success'://资质认证成功
                break;
            case 'qualification_verify_fail'://资质认证失败
                break;
            case 'naming_verify_success'://名称认证成功
                break;
            case 'naming_verify_fail'://名称认证失败
                break;
            case 'annual_renew'://年审通知
                break;
            case 'verify_expired'://认证过期失效通知
                break;
            case 'poi_check_notify'://服务号创建门店审核事件推送
                break;
            case 'create_map_poi_audit_info'://腾讯地图中创建门店的审核结果
                break;
            case 'add_store_audit_info'://创建门店的审核结果
                break;
            case 'card_pass_check'://卡券通过审核事件推送
                \App\Jobs\WxCardCheck::dispatch($payload);
                break;
            case 'card_not_pass_check'://卡券未通过审核事件推送
                \App\Jobs\WxCardCheck::dispatch($payload);
                break;
            case 'user_get_card'://卡券领取事件推送
                //异步更新用户领取数据
                \App\Jobs\WxCardUserGet::dispatch($payload);
                //异步更新用户数据
                \App\Jobs\WxUserRefresh::dispatch($payload['FromUserName'])->onQueue('high');
                //异步刷新用户会员卡数据
                \App\Jobs\WxCardUpset::dispatch($payload)->onQueue('high');
                break;
            case 'user_gifting_card'://卡券转赠事件推送
                //异步更新用户领取数据
                \App\Jobs\WxCardUserGifting::dispatch($payload);
                //异步刷新用户会员卡数据
                \App\Jobs\WxCardUpset::dispatch($payload)->onQueue('high');
                break;
            case 'user_del_card'://用户删除卡券事件推送
                //异步更新用户领取数据
                \App\Jobs\WxCardUserDel::dispatch($payload);
                //异步刷新用户会员卡数据
                \App\Jobs\WxCardUpset::dispatch($payload)->onQueue('high');
                break;
            case 'user_consume_card'://核销事件推送
                //异步刷新用户卡券数据
                \App\Jobs\WxCardUpset::dispatch($payload)->onQueue('high');
                break;
            case 'user_pay_from_pay_cell'://卡券买单事件推送
                //异步刷新用户会员卡数据
                \App\Jobs\WxCardUpset::dispatch($payload)->onQueue('high');
                break;
            case 'user_view_card'://用户点击会员卡事件推送
                //异步更新用户数据
                \App\Jobs\WxUserRefresh::dispatch($payload['FromUserName'])->onQueue('high');
                //异步刷新用户会员卡数据
                \App\Jobs\WxCardUpset::dispatch($payload)->onQueue('high');
                break;
            case 'user_enter_session_from_card'://用户从卡券进入公众号会话事件推送
                break;
            case 'update_member_card'://会员卡内容更新事件推送
                break;
            case 'card_sku_remind'://卡券库存报警事件推送
                break;
            case 'card_pay_order'://券点流水详情事件
                break;
            case 'submit_membercard_user_info'://会员卡激活事件推送
                //异步更新用户数据
                \App\Jobs\WxUserRefresh::dispatch($payload['FromUserName'])->onQueue('high');
                //异步刷新用户卡券数据
                \App\Jobs\WxCardUpset::dispatch($payload)->onQueue('high');
                break;
            case 'card_merchant_check_result'://子商户审核事件推送
                break;
            default:
        }
        //return new \EasyWeChat\Kernel\Messages\Text('收到事件推送消息');
    }
}